
\chapter{Fundamentação Teórica}
\label{chap:fundam}

Neste capítulo serão abordados os principais conceitos envolvidos no desenvolvimento do 
trablho.

\section{Processamento Digital de Imagens}

Uma imagem monocromática pode ser definida por uma função de duas dimensões $f(x,y)$, onde 
$x$ e $y$ são as coordenadas do plano espacial, e a amplitude de qualquer par de coordenada
é chamado de intensidade ou nível de cinza naquele ponto \cite{GONZALEZ}. Sendo $x$, $y$ e a 
intensidade valores discretos e finitos, estes então, podem ser manipulados e processados por 
um computador.

Assim, para tornar possível o processamento digital a imagem precisa passar por um processo de 
aquisição, amostragem e quantização.
\begin{itemize}
 \item O processo de aquisição consiste no uso de sensores que convertem a intensidade da 
luz que inside sobre ele em um valor de tensão proporcional.
 \item A amostragem e Quantização vão definir  respectivamente, a dimensão espacial da imagem 
e a quantidade de níveis de cinza que serão usados para reprenentá-la. 
\end{itemize}
Na figura \ref{sampling} é ilustrado o processo de geração de uma imagem digital
a partir do espaço contínuo. Na figura \ref{samplinga} tem-se a imagem contínua,
a \ref{samplingb} é o gráfico da função unidimensional com a variação 
da intensidade do nível de cinza que vai de A a B, o processo de amostragem e quantização são  
apresentados na figura \ref{samplingc}. O intervalo é dividido 
em pequenos espaços iguais que representam os pontos da função discretizada e os níveis de
 cinza são divididos em oito intervalos discretos que vão do preto ao branco. Finalmente Na figura 
\ref{samplingd}, é apresentado o resultado da amostragem e quantização representada 
pela função discreta.



\begin{figure}[htbp]
\centering
 \caption[Digitalizando Uma Imagem]{Digitalizando Uma Imagem.} 
  \subfigure[Imagem no Espaço Contínuo]{
   % \label{sampling}
    \includegraphics[width=5cm, height=5cm]{samplinga.jpg}
      \label{samplinga}
  }
  \qquad
  \subfigure[Função Que Descreve a Linha AB]{
   % \label{labelname2}
    \includegraphics[width=5cm, height=5cm]{samplingb.jpg}
      \label{samplingb}
  }
  \qquad
\subfigure[Amostragem e Quantização]{
   % \label{labelname2}
    \includegraphics[width=5cm, height=5cm]{samplingc.jpg}
    \label{samplingc}
  }
   \qquad
\subfigure[Função Discreta]{
   % \label{labelname2}
    \includegraphics[width=5cm, height=5cm]{samplingd.jpg}
      \label{samplingd}
  }

 \fonte{\cite{GONZALEZ}}
 \label{sampling}
\end{figure}

Portanto, uma imagem digital pode ser representada quantitativamente por uma matriz, onde cada
posição contem um valor de cinza e é indexado por $x$ e $y$, conforme figura \ref{representa_imagem}.
Essas unidades formadoras da imagem digital são denominadas pixel \cite{PRATT}.

\begin{figure}[htbp]
\centering
\caption[Representação Quantitativa]{Representação Quantitativa de Uma Imagem Digital.}
\includegraphics[width=10cm,height=3cm]{matriz.jpg}
\fonte{\cite{GONZALEZ}}
\label{representa_imagem}
\end{figure}

\subsection{Filtragem no Domínio da Frequência}
A filtragem no domínio da frequência consiste em transformar o domínio espacial da imagem para 
o domínio da frequência através da transformada de \textit{Fourier} \cite{OPPENHEIM}. Uma vez a imagem
estando no domínio da frequência é possível aplicar filtros passa-baixa, passa-alta e/ou 
passa-faixa, de acordo com o abjetivo. Caso o objetivo seja eliminar ruídos de alta frequência, 
por exemplo, pode-se aplicar um filtro passa-baixa. Finalmente, após a aplicação do filtro
calcula-se a transformada inversa de \textit{Fourier} obtendo a imagem filtrada no dimínio espacial 
novamente\cite{GONZALEZ}. Na figura \ref{ilustra_fft} é possível visualizar a aplicação da 
transformada, na figura \ref{fig_original} tem-se a imagem original e na figura \ref{fig_espectro} é mostrado 
o seu espectro de frequência após a aplicação da transformada de \textit{Fourier}.
Um exemplo de filtragem no domínio da frequência é ilustrado na figura \ref{filtragem_frequencia}.

\begin{figure}[htbp]
\centering
\caption{Transformada de Fourier de uma Imagem.}
  \subfigure[Imagem Original]{
   % \label{sampling}
    \includegraphics[width=5cm, height=5cm]{fig_original.jpg}
      \label{fig_original}
  }
  \qquad
  \subfigure[Espectro de Frequência da Imagem]{
   % \label{labelname2}
    \includegraphics[width=5cm, height=5cm]{fig_espectro.jpg}
      \label{fig_espectro}
  }
\fonte{\cite{PDI}}
\label{ilustra_fft}
\end{figure}

\begin{figure}[htbp]
\centering
\caption{Filtragem no Domínio da Frequência.}
  \subfigure[Imagem com Ruído de Alva Frequência]{
   % \label{sampling}
    \includegraphics[width=5cm, height=5cm]{ima_ruido.jpg}
      \label{ima_ruido}
  }
  \qquad
  \subfigure[Filtro Passa-Baixa]{
   % \label{labelname2}
    \includegraphics[width=5cm, height=5cm]{ima_filtro.jpg}
      \label{ima_ruido}
  }

  \subfigure[Imagem Filtrada]{
   % \label{labelname2}
    \includegraphics[width=5cm, height=5cm]{img_filtrada.jpg}
      \label{ima_filtrada}
  }
\fonte{\cite{PDI}}
\label{filtragem_frequencia}
\end{figure}


\subsection{Filtragem Espacial}
As técnicas de processamento no domínio espacial, ou seja, no próprio plano da imagem,
baseiam-se na manipulação direta dos pixels. Contrastando com o processamento no 
domínio da frequência, como visto na seção anterior, precisa realizar a transformada de 
\textit{Fourier}, realizar o processamento, e então fazer a transformada inversa para obter 
a imagem processada.

Geralmente as técnicas no domínio espacial são mais eficientes computacionalmente.
Os processos no domínio espacial podem ser expressos pela equação \ref{espacial}, 
onde $f(x,y)$ é a image de entrada, $g(x,y)$ é a imagem de saída e $T$ é um operador 
em $f$ definido em uma vizinhança do ponto $(x,y)$\cite{GONZALEZ}. 

\begin{equation}
 g(x,y)=T[f(x,y)]
\label{espacial}
\end{equation}

\subsubsection{Convolução Espacial}

O processo de convolução consiste em mever uma máscara(Matriz de convolução) rotacionada 
de $180^{0}$ sobre a imagem. A convolução é fundamental na teoria de sistemas lineares e 
conseguentimente de filtros lineares espaciais, e é expressa pela equação
\ref{convolucao} \cite{GONZALEZ}.

\begin{equation}
 w(x,y) f(x,y)=\sum_{\substack{s=-a}}^{a}\sum_{\substack{t=-b}}^{b}w(s,t)f(x-s,y-t)
\label{convolucao}
\end{equation}

Assim, para filtrar uma imagem através de convolução é necessário especificar a máscara do filtro
de forma a corresponder a operação pretendida. Para criar um filtro de suavização, por exemplo,
pode ser usado a máscara da figura \ref{passabaixa}. A saída de um filtro espacial linear
de suavização á a média dos pixels contidos na vizinhança da mascara de filtragem. Esse tipo de
filtro é conhecido como filtro de média ou passa-baixa por corresponder ao filtro passa baixa
no domínio da frequência \cite{GONZALEZ}.

\begin{figure}[htbp]
\centering
\caption{Máscara de filtro de suavização 3x3.}
\includegraphics[width=5cm,height=2cm]{passabaixa.jpg}
\fonte{Adaptada de:\cite{GONZALEZ}}
\label{passabaixa}
\end{figure}

A imagem da figura \ref{conv}, ilustra o processo de deslocar o filtro sobre a imagem no processo de
filtragem, mostrando em um determinado instante a região afetada pela máscara.

\begin{figure}[htbp]
\centering
\caption{Ilustração do processo de convolução.}
\includegraphics[width=15cm,height=12cm]{conv_im.jpg}
\fonte{Adaptada de:\cite{GONZALEZ}}
\label{conv}
\end{figure}

\subsubsection{Filtros Espaciais de Aguçamento Não Linear}
Para realçar as variações de intensidade os filtros usam a magnitude do gradiente. Para uma
função $f(x,y)$, o gradiente de $f$ nas coordenadas $(x,y)$ é definida como o vetor coluna
bidimensional.

\begin{equation}grad(f)=
  \left[ \begin{array}{ccc}
\frac{df}{dx} \\
\frac{df}{dy} \\
 \end{array} \right]
\label{gradiente}
\end{equation}

O vetor \ref{gradiente} tem a importante properiedade de aponta em direção à maior taxa de variação
de $f$ na posição $(x,y)$. O módulo da magnitude do vetor é dada pela equação \ref{modulo}.
Onde $M(x,y)$ é o módulo no ponto e $gx$ é a variação na direção $x$ e $gy$ na direção $y$.

\begin{equation}
M(x,y)=\sqrt{gx^2+gy^2}
\label{modulo}
\end{equation}

Tomando uma máscara $3\times3$ como na figura \ref{mascara_generica}, centrada em $z_{5}$,
 $gx$ e $gy$ são:

\begin{equation}
gx=(z_{7}+2z_{8}+z_{9})-(z_{1}+2z_{2}+z_{3})
\label{variacaox}
\end{equation}

\begin{equation}
gy=(z_{3}+2z_{6}+z_{9})-(z_{1}+2z_{4}+z_{7})
\label{variacaoy}
\end{equation}

\begin{figure}[htbp]
\centering
\caption{Máscara Genérica 3x3.}
\includegraphics[width=5cm,height=5cm]{mascara_generica.jpg}
\fonte{\cite{GONZALEZ}}
\label{mascara_generica}
\end{figure}

As equações \ref{variacaox} e \ref{variacaoy} resultam nas máscaras das figuras \ref{sobelx}
 e \ref{sobely} respectivamente.

\begin{figure}[htbp]
\centering
\caption{Operador de Sobel.}
  \subfigure[Máscara de Sobel em y]{
   % \label{sampling}
    \includegraphics[width=5cm, height=5cm]{sobely.jpg}
      \label{sobelx}
  }
  \qquad
  \subfigure[Máscara de Sobel em x]{
   % \label{labelname2}
    \includegraphics[width=5cm, height=5cm]{sobelx.jpg}
      \label{sobely}
  }
\fonte{\cite{GONZALEZ}}
\label{sobel}
\end{figure}

A figura \ref{resultado_gradientesobel} mostra um resultado obtido através do gradiente descrito 
acima.
\newpage

\begin{figure}[htbp]
\centering
\caption{Resultado obtido com operador de Sobel.}
  \subfigure[Imagem ótica de uma lente de contato]{
   % \label{sampling}
    \includegraphics[width=5cm, height=5cm]{sobel_resultadoa.jpg}
      \label{sobel_a}
  }
  \qquad
  \subfigure[Gradiente de Sobel]{
   % \label{labelname2}
    \includegraphics[width=5cm, height=5cm]{sobel_resultadob.jpg}
      \label{sobel_b}
  }
\fonte{\cite{GONZALEZ}}
\label{resultado_gradientesobel}
\end{figure}

\section{ipPROCESS}
Ao longo das últimas décadas houve uma crescente demanda por sistemas embarcados que agregam 
muitas funcionalidades, como informação, entretendimento e comunicação. Porém o desenvolvimento
de tais dispositivos é complexo e caro, impondo grandes desafios principalmente quanto a integração
em um sistema, surgindo assim a necessidade de reuso dos componentes para projetos de circuitos 
integrados(CIs). Os avanços das técnicas de integração possibilitou a existência de vários sistemas
complexos em um único chip, são os chamados \sigla{SoC}{System-on-Chip} \cite{SOC}. Os SoCs baseiam-se
na idéia do reuso de componentes pré-existentes denominados \sigla{IP-Core}{Intellectual Property Cores}
com o objetivo de reduzir o esforço e tempo do projeto. Por isso os desenvolvedores de
\textit{IP-Core} precisam garantir alta qualidade e sucesso da integraçao.

Nesse contexto o ipPROCESS \cite{BRAZILIP} é uma alternativa de processo de desenvolvimento de 
\textit{IP-Core} com prototipação em FPGA, baseado em  RUP \cite{RUP}. Assim o processo propõe um 
conjunto de disciplinas onde cada uma é definida como uma coleção de atividades relacionadas 
\cite{ARTIGOIP}. A figura \ref{ipestrutura} mostra a arquitetura do processo, onde a dimensão horizontal 
representa os aspectos dinâmicos do projeto, indicando como as atividades estão distribuidas
no tempo e define as fases e marcos, a vertical mostra o aspecto estrutural do projeto, isto é,
como este está descrito em termos das disciplinas. A figura mostra ainda a ênfase dada a cada
disciplina em cada fase e como isso varia ao longo do tempo.
\begin{figure}[htbp]
\centering
\caption{Arquitetura do ipPROCESS.}
\includegraphics[width=13cm,height=8cm]{ipestrutura.jpg}
\fonte{\cite{ARTIGOIP}}
\label{ipestrutura}
\end{figure}

\subsection{As Fases do ipPROCESS}
O ipPROCESS é um processo com cilco de vida iterativo e incremental, onde  
cada iteração gera um \textit{build}(versão funcional). Do ponto de vista
gerencial é dividido em quatro fases sequenciais e cada uma possui um marco principal, como
visto na figura \ref{ipfases}.

\begin{figure}[htbp]
\centering
\caption{Fases do ipPROCESS.}
\includegraphics[width=12cm,height=6cm]{ipfases.jpg}
\fonte{\cite{ARTIGOIP}}
\label{ipfases}
\end{figure}
As fases são difinidas de acordo com os objetivos e marcos a seguir:
\begin{itemize}
 \item O objetivo da fase \textit{Conception} é elucidar os requisitos funcionais e não funcionais
 do projeto e definir o seu escopo. O marco dessa fase é um documento de especificação 
 funcional estável do projeto \cite{ARTIGOIP}.
 \item A fase \textit{Architecture} tem por objetivo elaborar uma arquitetura estável do IP-core
 que servirá de base para o projeto e implementação. O marco para a passagem para a próxima fase 
 é apresentar tal atquitetura \cite{ARTIGOIP}.
 \item \textit{RTL Design}, tem como objetivo desenvolver um protótipo do IP-core amplamente verificado
  baseado na arquitetura desenvolvida na fase anterior. O marco da fase é apresentar a codificação em 
 nível RTL \cite{ARTIGOIP}.
 \item \textit{Prototyping}, foca a criação do protótipo físico em FPGA para ter certeza que o 
IP-core pode ser distribuído para os usuários finais (os integradores do sistema). O marco dessa fase é
o protótipo em FPGA do IP-core \cite{ARTIGOIP}.
\end{itemize}

\subsection{As Disciplinas do ipPROCESS}
As disciplinas definem um fluxo geral, determinando as atividades a serem executadas bem sua ordem 
de execução. Cada atividade, por sua vez, é definida em termos de tarefas a serem executadas com 
seus respectivos papéis responsáveis e artefatos de entrada e saída \cite{ARTIGOIP}. A seguir serão
descritas as disciplinas do processo, bem como os objetivos que seus respectivos conjuntos de 
atividades propõem atingir.
\begin{itemize}
 \item \textit{Requeriments}: os principais propósitos desta disciplina são:
\begin{enumerate}
 \item Entender as necessidades do cliente.
 \item Garantir que toda a equipe de desenvolvimento entenda os requisitos.
 \item Definir a interface externa do IP-core de acordo com as necessidades e objetivos do usuário
final.
\end{enumerate}
A figura \ref{requisitosa} mostra o fluxo de trabalho da disciplina e as atividades relacionadas a esta, 
como exemplificação a figura \ref{requisitosb} mostra o detalhamento da atividade
 \textit{Analyze the Problem}.

\begin{figure}[H]
\centering
\caption{Ilustração do Fluxo de Atividades da Disciplina \textit{Requeriments}.}
  \subfigure[Atividades da Disciplina \textit{Requeriments}]{
   % \label{sampling}
    \includegraphics[width=8cm, height=10cm]{disciplina_requisitosa.jpg}
      \label{requisitosa}
  }
  \qquad
  \subfigure[Detalhamento da Atividade \textit{Analyze the Problem}]{
   % \label{labelname2}
    \includegraphics[width=6cm, height=4cm]{disciplina_requisitosb.jpg}
      \label{requisitosb}
  }
\fonte{\cite{ARTIGOIP}}
\label{disciplina_requisitos}
\end{figure}

\item \textit{Analysis \& Design}: Os objetivos desta disciplina são:
\begin{enumerate}
 \item Projetar a arquitetura do IP-core.
 \item Especificar a funcionalidade dos componentes da arquitetura.
\end{enumerate}
Na figura \ref{disciplina_analise} é mostrado o fluxo de atividades da disciplina.

\begin{figure}[H]
\centering
\caption{Ilustração do Fluxo de Atividades da Disciplina \textit{Analysis \& Design}.}
\includegraphics[width=8cm,height=10cm]{disciplina_analise.jpg}
\fonte{\cite{ARTIGOIP}}
\label{disciplina_analise}
\end{figure}

\item \textit{RTL Implementation}: Como principais objetivos essa disciplina têm:
\begin{enumerate}
\item Implementar os componenetes definidos na arquitetura.
\item Definir como tais componentes devem ser integrados. 
\end{enumerate}

\item \textit{RTL Functional Verification}: Essa disciplina será detalhada na próxima seção,
devido sua importância no contexto de desenvolvimento de um \textit{IP-Core} e consequente 
relevância no presente projeto. Seus objetivos básicos são:
\begin{enumerate}
 \item Verificar se os requisitos estão sendo atendidos.
 \item Encontrar, documentar e corrigir problemas encontrados no modelo \textit{RTL}.
\end{enumerate}
Veja na figura \ref{disciplina_rtl_verification} o fluxo de atividades pertecentes às disciplinas
\textit{RTL Implementation} e \textit{RTL Functional Verification}, bem como a interação entre estas.

\begin{figure}[H]
\centering
\caption{Fluxos da  \textit{RTL Implementation} e \textit{RTL Functional Verification}.}
\includegraphics[width=12cm,height=8cm]{disciplina_rtl_verification.jpg}
\fonte{Adaptada de \cite{ARTIGOIP}}
\label{disciplina_rtl_verification}
\end{figure} 

\textit{FPGA Prototyping}: Objetivos:
\begin{enumerate}
 \item Transformar o modelo RTL em um protótipo físico.
 \item Validar a implementação dos requisitos no protótipo físico.
\end{enumerate}
Na figura \ref{disciplina_prototipagem} pose-se visualizar o fluxo de atividades da disciplina.

\begin{figure}[H]
\centering
\caption{Fluxos da  \textit{FPGA Prototyping}.}
\includegraphics[width=8cm,height=10cm]{disciplina_prototipagem.jpg}
\fonte{\cite{ARTIGOIP}}
\label{disciplina_prototipagem}
\end{figure} 

\end{itemize}

\section{Verificação Funcional}
O maior desafio no desenvolvimento de um \textit{IP-Core} é torna-ló confiável, assim 
outros projetistas de SoCs podem incorpora-los em seus projetos sem causar problemas possibilitando
o resuso. Nos últimos anos com a crescente complexidade dos projetos a verificação funcional se tornou 
o foco da maior parte do projeto e conseguentimente a parte mais cara deste. A qualidade e tempo de
desenvolvimento de um \textit{IP-core} dependem de como a verificação é feita \cite{DR_KARINA}.

Verificação funcional é um processo utilizado para verificar se o módulo implementado está
de acordo com suas especificações ou requisitos \cite{writingTestbenches}. Tal processo utiliza 
simulação para verificar o \sigla{DUV}{Design Under Verification}, para tornar isso possível é 
necessário que haja um conjunto de procedimentos capaz de gerar os estímulos e comparar as respostas
do DUV com as de um modelo de referência, esse conjunto de procedimentos é denominado \textit{Testbench}
\cite{writingTestbenches}. Na figura \ref{testbench} é mostrado a arquitetura com os componentes de um 
\textit{Testbench} típico.

\begin{figure}[htbp]
\centering
\caption{Arquitetura do Testbench}
\includegraphics[width=12cm,height=8cm]{testbench.jpg}
\fonte{Adaptado de: \cite{DR_KARINA}}
\label{testbench}
\end{figure} 

Cada componente tem uma função específica no processo de verificação do módulo a ser testado ou DUV.
\begin{itemize}
\item \textbf{Reference Model} é uma implementação em alto nível das funcionalidades do 
\textit{IP-Core}.
\item \textbf{Design Under Verification} é a implementação RTL do \textit{IP-Core}.
 \item \textbf{O Source} é responsável por gerar os estímulos que serão aplicados tanto ao modelo de 
referência quanto ao DUV.
\item \textbf{O Driver} é responsável por converter os estímulos gerados pelo source em sinais lógicos 
que possam ser aplicados à entrada do DUV, caso isso seja necessário.
\item \textbf{O Monitor} converte os sinais de saída do DUV em formato que possa ser usado
pelo checker,caso isso seja necessário.
\item \textbf{O Checker} compara as saídas do modelo de referência com as saídas do DUV, podendo assim 
identificar possíveis erros.
\end{itemize}

